package com.cdeledu.thread4.c05;

import java.util.List;
import java.util.concurrent.TimeoutException;

public interface Lock {
	
	/**永远阻塞，除非获取到了锁，这一点和synchronized非常类似，但是该方法是可以被中断的，中断时会抛出InterruptedException异常
	 * @throws InterruptedException
	 */
	void lock() throws InterruptedException;

	/**除了可以被中断以外，还增加了对应的超时功能
	 * @param mills
	 * @throws InterruptedException
	 * @throws TimeoutException
	 */
	void lock(long mills) throws InterruptedException, TimeoutException;

	/**锁的释放
	 * 
	 */
	void unlock();

	/**获取当前有哪些线程被阻塞
	 * @return
	 */
	List<Thread> getBlockedThreads();
	
}